package com

import (
	"github.com/jacobsa/go-serial/serial"
	"go_com_to_ws/ws"
	"io"
	"log"
	"time"
)

var port io.ReadWriteCloser

func connect(portName string) {
	// 设置串口配置
	options := serial.OpenOptions{
		PortName:        portName, // 串口设备名称，根据实际情况修改
		BaudRate:        9600,     // 波特率
		DataBits:        8,        // 数据位
		StopBits:        1,        // 停止位
		MinimumReadSize: 4,        // 最小读取字节数
	}

	// 打开串口
	log.Printf("正在连接COM：%s", portName)
	var err error
	port, err = serial.Open(options)
	if err != nil {
		log.Printf("serial.Open: %v,10秒后重新连接...", err)
		time.Sleep(time.Second * 10)
		connect(portName)
	} else {
		log.Printf("成功连接COM：%s", portName)
	}
}

func Listen(portName string) {
	for {
		if port == nil {
			connect(portName)
		}
		// 读取串口返回的数据
		buf := make([]byte, 512)
		n, err := port.Read(buf)
		if err != nil {
			log.Printf("Failed to read from serial port: %v", err)
			if port != nil {
				_ = port.Close()
				port = nil
				connect(portName)
			}
			continue
		} else {
			if n > 0 {
				log.Printf("获取到COM数据：%s", string(buf[:n]))
				ws.SendToAll(buf[:n])
			}
		}
	}
}
